import dicService from '@/api/dicService'

const tableDesc = require('../../public/json/tableDesc.json')
const useFun = {
  现状地类: getXZDL,
  生态保护红线: getSTBHHX,
  永久基本农田: getYJJBNT,
  城镇开发边界: getCZKFBJ,
  土地利用总体规划: getTDLYZTGH,
  控制性详细规划: getKZXXXGH,
  已批预审红线: getYPYSHX,
  地质灾害防治规划: getDZZHFZGH,
  林地保护利用规划: getLDBHLYGH,
  村庄规划: getCZGH
}

export default {
  // 获取管制区类型
  async getType (typeList, code) {
    return new Promise(resolve => {
      for (var i = 0; i < typeList.length; i++) {
        if (typeList[i].value === code) {
          resolve(typeList[i].name)
        }
      }
    })
  },
  // 获取表格标题
  getTableTitle (layer, tabName) {
    const data = tableDesc[layer]

    for (var i = 0; i < data.tabList.length; i++) {
      if (data.tabList[i].name === tabName) {
        return data.tabList[i].tableTitle
      }
    }
  },
  // 获取分析结论
  getTableDesc (layer, tabList, projectArea) {
    var desc = tableDesc[layer].tableDesc
    return new Promise((resolve, reject) => {
      resolve(useFun[layer](desc, tabList, projectArea))
    })
  },
  // 获取现状地类表格数据&说明
  async getDLMX (dataList, dicName) {
    return new Promise((resolve) => {
      dicService.treeDicItemByDicName(dicName, '/').then(data => {
        var result = {
          tableData: {},
          beizhu: []
        }
        data.forEach(item => {
          result.tableData = this.initData(item, result.tableData)
        })
        dataList.forEach((areaInfo, index) => {
          // var area = (parseFloat(areaInfo.tbmj) / 0.0015).toFixed(2)
          var area =areaInfo.tbmj
          var obj={
            str: '',
            geometry: []
          }
          obj.str=(index + 1) + '、 ' + areaInfo.dlmc + area + '平方米'
          obj.geometry=areaInfo.geometry
          result.beizhu.push(obj)
          this.getAreaByCode(result.tableData, areaInfo)
        })
        resolve(result)
      })
    })
  },
  // 根据dataList组装面积
  getAreaByCode (arr, areaInfo) {
    var keys = Object.keys(arr)
    for (let i = 0; i < keys.length; i++) {
      if (arr[keys[i]].name) {
        if (arr[keys[i]].name.indexOf(areaInfo.dlbm) > -1) {
          // 单位需要换算成平方米  亩 / 0.0015
          // arr[keys[i]].value += parseFloat(areaInfo.tbmj / 0.0015)
          arr[keys[i]].value += areaInfo.tbmj
          break
        }
      } else {
        this.getAreaByCode(arr[keys[i]], areaInfo)
      }
    }
  },
  // 根据数据字典(data)组装数据格式
  initData (item, result) {
    result[item.name] = {}
    if (item.children && item.children.length > 0) {
      item.children.forEach(child => {
        this.initData(child, result[item.name])
      })
    } else {
      result[item.name].name = item.value
      result[item.name].value = 0
    }
    return result
  }
}

/*
 * 现状地类
 */
function getXZDL (desc, tabList, projectArea) {
  var areaList = {}
  var result = {}
  tabList.forEach(tab => {
    var str = desc
    Object.keys(tab).forEach(key => {
      if (key !== '建设用地' && key !== '未利用地') {
        var data = tab[key]
        areaList[key] = 0
        Object.keys(data).forEach(k => {
          if (key !== 'name') {
            areaList[key] += data[k].value
          }
        })
      } else {
        areaList[key] = tab[key].value
      }
    })
    // eslint-disable-next-line no-eval
    var area = eval(Object.values(areaList).join('+')) === 0 ? 0 : eval(Object.values(areaList).join('+')).toFixed(2)
    var gd = areaList.耕地 === 0 ? 0 : areaList.耕地.toFixed(2)
    var fgnyd = areaList.非耕农用地 === 0 ? 0 : areaList.非耕农用地.toFixed(2)
    var jsyd = areaList.建设用地 === 0 ? 0 : areaList.建设用地.toFixed(2)
    var wlyd = areaList.未利用地 === 0 ? 0 : areaList.未利用地.toFixed(2)
    var nyd = (parseFloat(gd) + parseFloat(fgnyd)) === 0 ? 0 : (parseFloat(gd) + parseFloat(fgnyd)).toFixed(2)

    str = str.replace('/area', area)
    str = str.replace('/gd', gd)
    str = str.replace('/nyd', nyd)
    str = str.replace('/fgnyd', fgnyd)
    str = str.replace('/jsyd', jsyd)
    str = str.replace('/wlyd', wlyd)

    result[tab.name] = str
  })
  return result
}

/*
 * 生态保护红线
 */
function getSTBHHX (desc, tabList, projectArea) {
  var data = {}
  var totalArea = 0
  var area1 = 0; var area2 = 0; var area3 = 0
  tabList.forEach(tab => {
    var sum = 0
    tab.tabData.forEach(area => {
      sum += parseFloat(area.叠加面积)
      totalArea += parseFloat(area.叠加面积)
    })
    data[tab.name] = sum
  })

  area1 = data.自然保护地 === 0 ? 0 : data.自然保护地.toFixed(2)
  area2 = data.饮用水源保护区 === 0 ? 0 : data.饮用水源保护区.toFixed(2)
  area3 = data.生态保护红线 === 0 ? 0 : data.生态保护红线.toFixed(2)
  desc = desc.replace('/boolean', totalArea === 0 ? '否' : '是')
  desc = desc.replace('/area1', area1)
  desc = desc.replace('/area2', area2)
  desc = desc.replace('/area3', area3)
  return desc
}

/*
 * 永久基本农田
 */
function getYJJBNT (desc, tabList, projectArea) {
  var sum = 0
  if (tabList.length!=0){
    tabList[0].tabData.forEach(item => {
      sum += parseFloat(item.叠加面积)
    })
  }

  desc = desc.replace('/boolean', sum === 0 ? '否' : '是')
  desc = desc.replace('/area', sum === 0 ? 0 : sum.toFixed(2))
  return desc
}

/*
 * 城镇开发边界
 */
function getCZKFBJ (desc, tabList, projectArea) {
  var sum = 0
  if (tabList.length!=0) {
    tabList[0].tabData.forEach(item => {
      sum += parseFloat(item.叠加面积)
    })
  }
  var area1 = (projectArea?parseFloat(projectArea):0) - parseFloat(sum)
  desc = desc.replace('/boolean', sum === 0 ? '否' : '是')
  desc = desc.replace('/area', sum === 0 ? 0 : sum.toFixed(2))
  desc = desc.replace('/area1', area1 === 0 ? 0 : area1.toFixed(2))
  return desc
}

/*
 * 土地利用总体规划
 */
async function getTDLYZTGH (desc, tabList, projectArea) {
  var areaList = []
  var types = []
  if (tabList[0].tabData.length === 0 && tabList[1].tabData.length === 0) {
    return '该项目不在土地利用总体规划范围内'
  }
  tabList.forEach(tab => {
    if (tab.name === '建设用地管制区') {
      tab.tabData.forEach(item => {
        if (!areaList[item.管制区类型]) {
          areaList[item.管制区类型] = item.叠加面积
        } else {
          areaList[item.管制区类型] += item.叠加面积
        }
      })
    } else if (tab.name === '规划用途') {
      tab.tabData.forEach(item => {
        types.push(item.规划用途名称)
      })
    }
  })

  var area1 = areaList['允许建设区'] ? '允许建设区面积' + areaList['允许建设区'] + '平方米' : '未占用允许建设区'
  var area2 = areaList['限制建设区'] ? '限制建设区面积' + areaList['限制建设区'] + '平方米' : '未占用限制建设区'
  var area3 = areaList['有条件建设区'] ? '有条件建设区面积' + areaList['有条件建设区'] + '平方米' : '未占用有条件建设区'
  var area4 = areaList['禁止建设区'] ? '禁止建设区面积' + areaList['禁止建设区'] + '平方米' : '未占用禁止建设区'

  desc = desc.replace('/area1', area1)
  desc = desc.replace('/area2', area2)
  desc = desc.replace('/area3', area3)
  desc = desc.replace('/area4', area4)

  if (types.length === 0) {
    desc = desc.replace('该项目规划用途分别为：/types', '该项目不在规划用途范围内')
  } else {
    desc = desc.replace('/types', types.join('， '))
  }

  return desc
}
// async function getTDLYZTGH (desc, tabList, projectArea) {
//   var areaList = []
//   var types = []
//   if (tabList.length!=0) {
//     if (tabList[0].tabData.length === 0 && tabList[1].tabData.length === 0) {
//       return '该项目不在土地利用总体规划范围内'
//     }
//   }
//   debugger
//   tabList.forEach(tab => {
//     if (tab.name === '建设用地管制区') {
//       tab.tabData.forEach(item => {
//         if (!areaList[item.管制区类型]) {
//           areaList[item.name] = item.叠加面积
//         } else {
//           areaList[item.name] += item.叠加面积
//         }
//       })
//     } else if (tab.name === '规划用途') {
//       tab.tabData.forEach(item => {
//         types.push(item.规划用途名称)
//       })
//     }
//   })
//   var area1 = areaList['允许建设区'] ? '允许建设区面积' + areaList['允许建设区'] + '平方米' : '未占用允许建设区'
//   var area2 = areaList['限制建设区'] ? '限制建设区面积' + areaList['限制建设区'] + '平方米' : '未占用限制建设区'
//   var area3 = areaList['有条件建设区'] ? '有条件建设区面积' + areaList['有条件建设区'] + '平方米' : '未占用有条件建设区'
//   var area4 = areaList['禁止建设区'] ? '禁止建设区面积' + areaList['禁止建设区'] + '平方米' : '未占用禁止建设区'
//
//   desc = desc.replace('/area1', area1)
//   desc = desc.replace('/area2', area2)
//   desc = desc.replace('/area3', area3)
//   desc = desc.replace('/area4', area4)
//
//   if (types.length === 0) {
//     desc = desc.replace('该项目规划用途分别为：/types', '该项目不在规划用途范围内')
//   } else {
//     desc = desc.replace('/types', types.join('， '))
//   }
//
//   return desc
// }

/*
 * 控制性详细规划
 */
function getKZXXXGH (desc, tabList, projectArea) {
  if (tabList[0].tabData.length > 0) {
    var types = []
    tabList[0].tabData.forEach(item => {
      types.push(item.用地性质)
    })
    desc = desc.replace('/types', types.join('， '))
  } else {
    desc = '该项目不在控制性详细规划范围内。'
  }

  return desc
}

/*
 * 已批预审红线
 */
function getYPYSHX (desc, tabList, projectArea) {
  var sum = 0
  tabList[0].tabData.forEach(item => {
    sum += parseFloat(item.叠加面积)
  })
  desc = desc.replace('/boolean', sum === 0 ? '否' : '是')
  desc = desc.replace('/area', sum === 0 ? 0 : sum.toFixed(2))

  return desc
}

/*
 * 地质灾害防治规划
 */
function getDZZHFZGH (desc, tabList, projectArea) {
  var areaList = []
  if (tabList.length!=0) {
    tabList[0].tabData.forEach(item => {
      if (!areaList[item.易发区类型]) {
        areaList[item.易发区类型] = parseFloat(item.叠加面积)
      } else {
        areaList[item.易发区类型] += parseFloat(item.叠加面积)
      }
    })
  Object.keys(areaList).forEach(key => {
    areaList[key] = areaList[key].toFixed(2)
  })
  var area1 = areaList['不易发区'] ? '位于不易发区面积' + areaList['不易发区'] + '平方米' : '不在不易发区范围内'
  var area2 = areaList['低易发区'] ? '低易发区面积' + areaList['低易发区'] + '平方米' : '不在低易发区范围内'
  var area3 = areaList['中易发区'] ? '中易发区面积' + areaList['中易发区'] + '平方米' : '不在中易发区范围内'
  var area4 = areaList['高易发区'] ? '高易发区面积' + areaList['高易发区'] + '平方米' : '不在高易发区范围内'

  desc = desc.replace('/boolean', tabList[0].tabData.length === 0 ? '否' : '是')
  desc = desc.replace('/area1', area1)
  desc = desc.replace('/area2', area2)
  desc = desc.replace('/area3', area3)
  desc = desc.replace('/area4', area4)
  if (tabList[0].tabData.length === 0){
    return '该项目是否位于地质灾害易发区内：否'
  }
  }
  return desc
}

/*
 * 林地保护利用规划
 */
function getLDBHLYGH (desc, tabList, projectArea) {
  var sum = 0
  if (tabList.length!=0) {
    tabList[0].tabData.forEach(item => {
      sum += parseFloat(item.叠加面积)
    })
    desc = desc.replace('/boolean', sum === 0 ? '否' : '是')
    desc = desc.replace('/area', sum === 0 ? 0 : sum.toFixed(2))
  }
  return desc
}

/*
 * 村庄规划
 */
function getCZGH (desc, tabList, projectArea) {
  if (tabList[0].tabData.length > 0) {
    var types = []
    tabList[0].tabData.forEach(item => {
      types.push(item.用地分类)
    })
    desc = desc.replace('/types', types.join('， '))
  } else {
    desc = '该项目不在村庄规划范围内。'
  }

  return desc
}
